﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace ARchGL.Platform.FileServer
{
    /// <summary>
    /// 查询项目列表结果
    /// </summary>
    public class ModelCouvertProcessApiDto
    {
        public ModelCouvertProcessApiDto()
        {
        }
        public Guid? Id { get; set; }
        public string DbConnectInfo { get; set; }
        /// <summary>项目标识</summary>
        public Guid ProjectId { get; set; }
        public int ModelId { get; set; }
        /// <summary>模型解析任务标识</summary>
        public Guid TaskId { get; set; }
        public string ResultAddr { get; set; }
        public string ShapeInstanceId { get; set; }
        /// <summary>
        /// 模型集合
        /// </summary>
        public IList<ModelList> ModelList { get; set; }
        /// <summary>
        /// 转换状态
        /// </summary>
        public TaskState TaskState { get; set; }

        /// <summary>
        /// 获取转换状态
        /// </summary>
        /// <returns></returns>
        public bool GetConvertStatus()
        {
            /*
            1. Found: false  错误：没有找到所查询的任务
            2. Found: True , Done: false    转换任务 还在进行中
            3. Found: True, Done: True, Seccess: False   转换流程出现异常
            4. Found: True, Done: True, Seccess: True   转换流程正常
                针对每个模型：
                4.1 Percent：100  模型转换成功
                4.2 Percent：0, ErrorMessage:FileAlreadyParsed  已存在相同的模型    //此种状态也表示 模型可以正常查看.
                4.3 Percent: 0, ErrorMessage:ParseModelError （或者其他）   模型转换失败
                    明确的错误：
                    4.3.1 Precent：0, ErrorMessage:FileTypeError  模型格式不对或者模型未找到
                    4.3.2 Precent：0, ErrorMessage:WriteError  数据写入异常
                    4.3.2 Precent：0, ErrorMessage:NetworkError  转换过程出现网络异常
                    4.3.2 Precent：0, ErrorMessage:NotProcess  没有找到对应转换程序
             */
            return TaskState != null && TaskState.Done && ModelList != null &&
                ModelList.Any(x => x.Precent == 100 ||
                                   x.ErrorMessage.Contains("FileAlreadyParsed"));
        }
    }

    public class ModelCouvertProcessResultItemApiDto
    {
        public ModelCouvertProcessApiDto Item { get; set; }
    }

    /// <summary>
    /// 模型集合
    /// </summary>
    public class ModelList
    {
        public string ErrorMessage { get; set; }
        public string Hash { get; set; }
        public bool IsCentarlFile { get; set; }
        public int ModelId { get; set; }
        public string ModelName { get; set; }
        public int Precent { get; set; }
    }

    /// <summary>
    /// 转换状态
    /// </summary>
    public class TaskState
    {
        public bool Done { get; set; }
        public bool Found { get; set; }
        public string Message { get; set; }
        public bool Successed { get; set; }
    }
}
